package controller

import (
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
	"go_web_learn/common"
	"go_web_learn/initconf"
	"go_web_learn/model"
	"gorm.io/gorm"
)

func TransactionInsert1(c *gin.Context) {
	db := initconf.DB
	// 使用事物
	err := db.Transaction(func(tx *gorm.DB) error {
		// 创建时间和修改时间会自动帮我们生成,可以不管
		stu1 := model.StuInfo{
			Name:      "小明",
			Class:     "1班",
			StudentId: uuid.New().String(),
		}
		userinfo1 := model.Userinfo{
			Name: "小明",
			Age:  18,
		}
		// 在事务中执行一些 db 操作（从这里开始，您应该使用 'tx' 而不是 'db'）
		if err := tx.Create(&stu1).Error; err != nil {
			// 返回任何错误都会回滚事务
			return err
		}
		if err := tx.Create(&userinfo1).Error; err != nil {
			return err
		}
		// 加个这个事物就失败了
		//panic("错误了")

		// 返回 nil 提交事务
		return nil
	})
	if err != nil {
		panic(err)
	}
	common.ResponseSuccess(c, true)
}

func TransactionInsert2(c *gin.Context) {
	db := initconf.DB
	stu1 := model.StuInfo{
		Name:      "小明",
		Class:     "1班",
		StudentId: uuid.New().String(),
	}
	userinfo1 := model.Userinfo{
		Name: "小明",
		Age:  18,
	}
	// 使用事物
	tx := db.Begin()
	if err := tx.Create(&stu1).Error; err != nil {
		tx.Rollback()
		panic(err)
	}
	if err := tx.Create(&userinfo1).Error; err != nil {
		tx.Rollback()
		panic(err)
	}
	tx.Commit()
	common.ResponseSuccess(c, true)
}
